// 权限拦截 导航守卫 路由守卫  router
// 引入路由实例
import router from '@/router'
// 引入vuex store实例
import store from '@/store'
// 引入一份进度条插件
import NProgress from 'nprogress'
// 引入进度条样式
import 'nprogress/nprogress.css'

// 定义白名单  所有不受权限控制的页面
const whiteList = ['/login', '/404']

// 路由的前置守卫
router.beforeEach(async(to, from, next) => {
  // 开启进度条
  NProgress.start()

  //  第一次分流有token;后续所有跳转方式
  if (store.getters.token) {
    //   如果有token 继续判断是不是去登录页
    if (to.path === '/login') {
      //  表示去的是登录页-->跳到主页
      // 这里可以提示一下("您已登录")
      next('/')
    } else {
      // 直接放行
      // 登录页不需要获取用户资料;登录以后访问的页面需要
      if (!store.getters.userId) {
        // 如果没有id这个值 才会调用 vuex的获取资料的action
        // 为什么要写await 因为我们想获取完资料再去放行
        await store.dispatch('user/getUserInfoData')
      }

      next()
    }
    //  第一次分流无token；后续所有跳转方式
  } else {
    // 如果没有token;是否去那些不需要登录权限页面
    if (whiteList.indexOf(to.path) > -1) {
      // 如果找到了 表示在在名单里面
      next()
    } else {
      // 跳到登录页(这些页面都是要登录才能访问)
      // 这里提示一下("请先登录")
      next('/login')
    }
  }
  // 手动强制关闭一次  为了解决 手动切换地址时  进度条的不关闭的问题(手动修改url里面的情况)
  NProgress.done()
})

// 路由的后置守卫
router.afterEach(function() {
  NProgress.done() // 关闭进度条
})
